package com.smart.community.user.service;

import com.smart.community.user.dto.RoleDTO;
import com.smart.community.user.dto.RoleQueryDTO;
import com.smart.community.user.vo.RoleVO;
import com.smart.community.user.vo.PageResult;

import java.util.List;

/**
 * 角色管理服务接口
 *
 * @author Wu.Liang
 * @since 2025-07-05
 */
public interface RoleService {

    /**
     * 分页查询角色列表
     *
     * @param queryDTO 查询条件
     * @return 分页结果
     * @throws Exception 统一异常
     */
    PageResult<RoleVO> getRoleList(RoleQueryDTO queryDTO) throws Exception;

    /**
     * 根据ID查询角色
     *
     * @param id 主键ID
     * @return 角色信息
     * @throws Exception 统一异常
     */
    RoleVO getRole(Long id) throws Exception;

    // 新增角色方法已移除 - 角色由系统预设，不允许手动创建
    // /**
    //  * 新增角色
    //  *
    //  * @param roleDTO 角色信息
    //  * @throws Exception 统一异常
    //  */
    // void createRole(RoleDTO roleDTO) throws Exception;

    /**
     * 更新角色
     *
     * @param id 主键ID
     * @param roleDTO 角色信息
     * @throws Exception 统一异常
     */
    void updateRole(Long id, RoleDTO roleDTO) throws Exception;

    /**
     * 删除角色
     *
     * @param id 主键ID
     * @throws Exception 统一异常
     */
    void deleteRole(Long id) throws Exception;

    /**
     * 更新角色状态
     *
     * @param id 主键ID
     * @param status 状态
     * @throws Exception 统一异常
     */
    void updateRoleStatus(Long id, Integer status) throws Exception;

    /**
     * 获取角色菜单
     *
     * @param id 角色ID
     * @return 菜单ID列表
     * @throws Exception 统一异常
     */
    List<Long> getRoleMenus(Long id) throws Exception;

    /**
     * 分配角色菜单
     *
     * @param id 角色ID
     * @param menuIds 菜单ID列表
     * @throws Exception 统一异常
     */
    void assignRoleMenus(Long id, List<Long> menuIds) throws Exception;

    /**
     * 检查角色编码是否存在
     *
     * @param roleCode 角色编码
     * @return 是否存在
     * @throws Exception 统一异常
     */
    boolean checkRoleCode(String roleCode) throws Exception;

    /**
     * 获取角色权限
     *
     * @param id 角色ID
     * @return 权限ID列表
     * @throws Exception 统一异常
     */
    List<Long> getRolePermissions(Long id) throws Exception;

    /**
     * 分配角色权限
     *
     * @param id 角色ID
     * @param permissionIds 权限ID列表
     * @throws Exception 统一异常
     */
    void assignRolePermissions(Long id, List<Long> permissionIds) throws Exception;

    /**
     * 根据角色编码获取角色ID
     *
     * @param roleCode 角色编码
     * @return 角色ID
     * @throws Exception 统一异常
     */
    Long getRoleIdByCode(String roleCode) throws Exception;
} 